package org.example.client.context;

import lombok.Data;

import java.util.Objects;

/**
 * UserContext
 */
@Data
public class UserContext {

    // 实际中可能不止一个用户ID，还包含其它用户信息
    private static final ThreadLocal<Long> USER_ID = new ThreadLocal<>();

    // 一般在 HandlerInterceptor preHandle 时根据 token 解析出用户信息,调用该方法，将用户信息存入ThreadLocal中
    public static void setUserId(Long userId) {
        if (Objects.isNull(userId)) {
            USER_ID.remove();
        } else {
            USER_ID.set(userId);
        }
    }

    // 一般在 HandlerInterceptor afterCompletion 时进行调用，清除 ThreadLocal 中的用户信息，防止内存溢出
    public static void clear() {
        USER_ID.remove();
    }

    public static Long getUserId() {
        // 实际应该 return USER_ID.get();
        return 1L;
    }
}
